home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / QuickDraw™ 3D 1.5.3 Rel. Notes < prev   
Encoding:
Text File  |  1997-08-14  |  16.4 KB  |  297 lines  |  [TEXT/ttxt]

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                             
  11.                             QuickDraw™ 3D Release Notes for Version 1.5.3
  12.  
  13. Wireframe Renderer: Clipping error
  14.  
  15. The WireFrame renderer would occasionally render incorrectly or crash, if the frame contained geometric primitives which stretched from in front of the camera to behind it.
  16.  
  17.  
  18. Interactive Renderer:  Clipping error
  19.  
  20. If the hither and yon planes specified in the camera setup differ too greatly, the Interactive renderer occasionally clipped incorrectly, or would crash. Crashes have been eliminated in such situations; however, excessive differences between the hither and yon values may still cause parts of primitives to fail to be drawn. 
  21.  
  22. To alert applications to situations in which they have set the hither and yon planes too far apart, a warning has been added to the camera API calls (debug library only) that such a condition exists.
  23.  
  24. Application developers should take care to heed these warnings, or there will be a risk of non-display of some primitives (depends upon position of the object within the viewing frustum, etc.)
  25.  
  26.  
  27. Picking: Window point pick sometimes missed
  28.  
  29. A window point pick could sometimes not return a pick hit on a geometric primitive that clearly should have been hit. This may have been particularly severe with cones, cylinders, ellipsoids, and tori.
  30.  
  31.  
  32. Mesh: Performance optimization
  33.  
  34. For purposes of rendering, the mesh primitive is converted to a simpler type. This conversion may have happened more often than necessary, in some fairly common situations. The conversion function has been modified to avoid excessive re-conversion when appropriate, which may lead to a significant performance increase in affected usage scenarios.
  35.  
  36.  
  37. Cylinder: Performance optimization.
  38.  
  39. For purposes of rendering, the faces of cylinder primitives were decomposed into a grid of quadrilaterals.  This resulted in a larger data footprint as well as non-optimal rendering and picking performance. Now, the cylinder is decomposed into a number of quads, each of which stretch from bottom to top. Note that this is the case even for uniform subdivision where the v-direction subdivision is specified as other than 1.
  40.  
  41.  
  42. Draw Context: Per-frame overhead optimization
  43.  
  44. The per-frame overhead due to draw context setup has been significantly reduced. This will be most noticeable in less complex frames, for whom setup is not dwarfed by rendering proper.
  45.  
  46.  
  47. MacDrawContext: Panes, masks, clip regions, and SetOrigin()
  48.  
  49. Prior to 1.5.3:
  50.  
  51. 1.  Clip regions were ignored.
  52. 2.  SetOrigin() calls were ignored.
  53. 3.  Panes had to be entirely contained inside the window.
  54. 4.  Various other bugs existed, which resulted in a variety of visual artifacts in some circumstances.
  55.  
  56. All of these known bugs and shortcomings have been fixed:
  57. 1.  Clip regions are always honored.
  58.  
  59. 2.  Since SetOrigin was being ignored, when an application that used SetOrigin() created a MacDrawContext in a pane, the image would not appear where they expected.  As a work around for this problem, some developers would adjust the coordinates of the pane to compensate.  This causes a problem for backwards compatibility.  If QD3D honors SetOrigin() the pane  will again be in the wrong place for these applications that used this work around.  To solve this problem, new applications that want SetOrigin() to be honored should set the field library in TQ3MacDrawContextData to kQ3Mac2DLibraryQuickDraw.  They must also set the field grafPort to the window that contains the draw context.
  60.  
  61. When library is set to kQ3Mac2DLibraryNone, SetOrigin() calls are ignored; this is to keep backwards compatibility with applications that used the above work around.
  62.  
  63. When library is set to kQ3Mac2DLibraryQuickDraw, SetOrigin() calls are honored. Also, grafPort must be set instead of window.
  64.  
  65. 3.  Panes can now lie partly or entirely outside of the window.
  66.  
  67. 4.  Various other bugs have been fixed.
  68.  
  69.  
  70. Windows:  No way to weak link against the QD3D DLLs
  71.  
  72. The solution was to create a static link library that loads the QD3D DLL at Q3Initialize time and name binds against the functions. If the libraries are not present then an error is returned. The developer then links aginst this libarary instead of the QD3D libs. This libarary is distributed with the SDK only.
  73.  
  74. If the libraries are not present, Q3Initialize (in the glue code) automatically returns kQ3Failure; if they are present, it will return whatever thre real Q3Initialize returns. In either case, the application will still launch.
  75.  
  76.  
  77. RAVE: Asynchronous engines drew over menus and windows
  78.  
  79. A RAVE rasterization engine may be asynchronous with respect to the client application. In single-buffered mode, the window may be rendered to at any time, and in double-buffered mode, the rendered image may be copied to the window at any time. If a menu or other window is placed in front of such a window after rendering is begun, the rendering to the window (single-buffered) or the copying of the rendered image (double-buffered) may then overwrite the menu or obscuring window.
  80.  
  81. To prevent this problem, two new RAVE API calls have been added, which asynchronous RAVE engines need to use. These API calls allow the RAVE engine to be notified if and when the window's visibility has been changed. These are:
  82.  
  83.     QARegisterDrawNotificationProc()
  84.  
  85. and
  86.  
  87.     QAUnregisterDrawNotificationProc()
  88.  
  89. A more detailed explanation of this can be found on the SDK.
  90.  
  91.  
  92. RAVE software rasterizer: Pixel drop-outs 
  93.  
  94. RAVE Software engine was not calculating edge parameters consistently. When drawing a set of triangles that share vertices, pixel drop-outs occurred. 
  95.  
  96.  
  97. System: QD3D crashed when MoviePlayer opened movie with 3D track
  98.  
  99. Applications which use QuickDraw 3D and QuickTime, like the MoviePlayer, 
  100. sometimes crashed prior to 1.5.3 after opening and closing several movies 
  101. that contained 3D tracks.
  102.  
  103. This was evident when a QuickDraw 3D client located in the system heap, 
  104. like QuickTime, called Q3Exit and Q3Initialize, which happens when movies 
  105. with 3D tracks are closed and opened.  A fix was made in QuickDraw 3D to 
  106. properly release the code fragment for an extension or "plug-in", for 
  107. example the QuickDraw 3D Interactive Renderer.  Again, this problem only 
  108. occurred for QuickDraw 3D clients residing in the system heap..
  109.  
  110.  
  111. Viewer: Undesirable re-rendering when using non-interactive renderers
  112.  
  113. The viewer resets the subdivision level if it takes beyond a certain amount of time to draw a frame.  If the renderer is a non-interactive type renderer, this may be undesirable as resulted in a re-rendering that may have beeen slow due to the non-interactive nature of the renderer. So, for non-interactive renderers, this feature has been disabled.
  114.  
  115.  
  116. Viewer: Failed to display control buttons when using 8 bit mode.
  117.  
  118. When the viewer is in 8 bit mode and using its own offscreen Gworld, and a call to Viewer_DrawControlStrip() is made, the buttons are drawn into the viewer's offscreen, but were not blitted into the final destination port.
  119.  
  120.  
  121. Viewer: Offscreen not erased when using 8-bit mode
  122.  
  123. When this function created a new GWorld, it didn't erase it. This was most noticeable in the edges around the content area in the Viewer, which resembled lines made out of multi-colored dots. This only occurred when the viewer was using its own offscreen (i.e., 8 bit)
  124.  
  125.  
  126. Vewer: No offscreen blit in 8-bit mode
  127.  
  128. If the viewer was drawing into an 8 bit port, an offscreen created that the viewer drew into was not being blitted to the screen.
  129.  
  130.  
  131. Viewer: Once viewer is set to 8-bit mode, its internal state did not change.
  132.  
  133. When you create a viewer that draws into an 8 bit port (whether that be screen or GWorld) it sets a flag internally that it is drawing into an 8 bit port. If you change the viewer to draw into a port of a greater depth, that flag did not get updated.
  134.  
  135.  
  136. Viewer: In SimpleText, couldn't select text if 3DMF is open in background.
  137.  
  138. It was impossible to select text from a Simpletext document when a 3DMF is opened in Simpletext in the background. Trying to select text only moved and rotated the 3DMF behind the active document window.
  139.  
  140.  
  141. Viewer:  Didn't use clear image color read from ViewHints.
  142.  
  143. If a 3DMF file contained a ViewHints object with an image background color, the Viewer ignored that information.
  144.  
  145.  
  146. Viewer: When using in SimpleText, a displayed image would brighten and dim
  147.  
  148. When typing text into SimpleText, the 3DMF file would dim or brighten. The Viewer thought that the key presses belong to it. The "d" key would dim, and the "b" key would make it get brighter.
  149.  
  150.  
  151.  
  152. Viewer: SimpleText File-Open of 3DMF file w/ Balloon Help caused redraw problem
  153.  
  154. The problem was that Q3ViewerEvent() was sucking up update events and sending them down a black hole.  The app never knew that it needed to do an update.
  155.  
  156.  
  157. Viewer:  In Scrapbook or SimpleText, could get into "no button selected state"
  158.  
  159. This happened under the following scenario:
  160.  
  161. 1. Open the Scrapbook with the Scrapbook file as installed by QD3D.
  162. 2. Scroll to the 2nd item in the Scrapbook.
  163. 3. Choose Top View from the Camera pop-up menu.
  164. 4. Notice that the Viewer buttons were all now deselected, and clicking within the model content area did nothing. The Viewer appeared to no longer be working at this point.
  165.  
  166. Also happened in SimpleText:
  167.  
  168. 1.  Open any model.
  169. 2.  Choose any view.
  170.  
  171. All buttons are dim. If you pressed any other buttons (including the rotate button that is already selected) before step 2 the problem did NOT occur. If you clicked in the gray area beside the buttons before step 2 the problem did NOT occur. If you rotate the model before step 2 the problem DID occur.
  172.  
  173.  
  174. Error messages:  Unreadable in MacsBug
  175.  
  176. Because the error message was too long to read. It was filled with a long pathname and, one assumes, the actual error ran off the right side of the screen. The pathname has been trucated, so as to allow the message to be visible.
  177.  
  178.  
  179. Icon definitions: Missing
  180.  
  181. In the QD3D init, icons were defined for things of creator type 'QD3D' but not for either 'Q3XT' (QD3D extensions) or 'tnsl' (RAVE engines).  We have changed the BNDL resource and added the proper FREF resources along with an additional set of icons, so that if a developer doesn't define a custom icon, the user still sees that this has something to do with QuickDraw 3D.
  182.  
  183. The QuickDraw 3D INIT is a file of creator type 'QD3D' - thus it can only define icons for files with this same creator type.  Extensions have the creator type 'Q3XT'. Thus, we have:
  184.  
  185. - Set up a BNDL resource to map files of type 'shlb' with creator type 'Q3XT' (which automatically creates the needed FREF and signature resources) to a set of icons.  QD3D extensions without custom icons should end up using these icons.
  186.  
  187. - Added custom icons to the Apple 3D hardware accelerator card driver and engine.
  188.  
  189.  
  190. Resources: Missing CCI™ resources for QuickDraw 3D components
  191.  
  192. Currently ExtensionsManager 4 has an informational database installed with the OS which contains more detailed file information for control panels and extensions in the System folder. This file information contains a more detailed description of the file than balloon help.  In EM4, this text is displayed in the "Show Item Information" field.
  193.  
  194.  
  195. Interface Files: Unused identifiers
  196.  
  197. The following identifiers in QD3D.h have been removed, as they are not used anywhere in the library:
  198.  
  199.                 #define kQ3ElementTypeName   34
  200.                 #define kQ3ElementTypeURL    35
  201.  
  202.  
  203. Interface Files:  Erroneous method prototype definition
  204.  
  205. In QD3DRenderer.h, we had:
  206.  
  207. typedef TQ3Status (QD3D_CALLBACK *TQ3XRendererUpdateShaderMethod)(
  208.                 TQ3ViewObject      view,
  209.                 void               *rendererPrivate,
  210.     TQ3Object          shaderObject);
  211.  
  212. but the third parameter is passed in by QD3D to the method as a pointer to a shader object, instead of the object itself, which was inconsistent with the above definition.
  213.  
  214. The solution was to change the definition in the header file to:
  215.  
  216. typedef TQ3Status (QD3D_CALLBACK *TQ3XRendererUpdateShaderMethod)(
  217.                 TQ3ViewObject       view,
  218.                 void                *rendererPrivate,
  219.              TQ3Object           *shaderObject);
  220.  
  221.  
  222. Interface Files: Obsoleted routines and identifiers removed
  223.  
  224. All macros, functions, structures, and other identifiers previously marked "QD3D_OBSOLETE" have been removed from the interface files. The entry points in the shared libraries are still present, to preserve compatibility with existing older application binaries. However, applications should now only use identifiers explicitly defined in the current interface files, because these API calls will, in some future release of QuickDraw 3D, no longer be exported and thus cease to function.
  225.  
  226. The changes are as follows:
  227.  
  228.            OLD                                                                                                                                                        NEW
  229. -------------------------------------------------------------------------
  230. TQ3ObjectClass                                                                                                            TQ3XObjectClass
  231. TQ3MethodType                                                                                                             TQ3XMethodType
  232.  
  233. kQ3MethodTypeObjectUnregister                                                kQ3XMethodTypeObjectUnregister
  234. kQ3MethodTypeObjectFileVersion                                            kQ3XMethodTypeObjectFileVersion
  235. kQ3MethodTypeObjectTraverse                                                        kQ3XMethodTypeObjectTraverse
  236. kQ3MethodTypeObjectTraverseData                                        kQ3XMethodTypeObjectTraverseData
  237. kQ3MethodTypeObjectWrite                                                                    kQ3XMethodTypeObjectWrite
  238. kQ3MethodTypeObjectReadData                                                        kQ3XMethodTypeObjectReadData
  239.  
  240. TQ3FunctionPointer                                                                                      TQ3XFunctionPointer
  241. TQ3MetaHandler                                                                                                TQ3XMetaHandler
  242.  
  243. TQ3ObjectUnregisterMethod                TQ3XObjectUnregisterMethod
  244. Q3ObjectClass_Unregister                                                     Q3XObjectHierarchy_UnregisterClass
  245. TQ3ObjectTraverseMethod                                                                        TQ3XObjectTraverseMethod    
  246. TQ3ObjectWriteMethod                                                                                    TQ3XObjectWriteMethod
  247. TQ3DataDeleteMethod                                                                                        TQ3XDataDeleteMethod
  248. Q3View_SubmitWriteData                                                                            Q3XView_SubmitWriteData
  249. TQ3ObjectReadDataMethod                                                                        TQ3XObjectReadDataMethod
  250.  
  251. Q3Quaternion_SetRotateXYZ                                                                Q3Quaternion_SetRotate_XYZ
  252. Q3Quaternion_SetRotateX                                                                        Q3Quaternion_SetRotate_X
  253. Q3Quaternion_SetRotateY                                                                        Q3Quaternion_SetRotate_Y
  254. Q3Quaternion_SetRotateZ                                                                        Q3Quaternion_SetRotate_Z
  255.  
  256. Q3Pick_GetHitData                                                                                             Q3Pick_GetPickDetailData
  257. TQ3HitData                                                                                                                            TQ3PickDetailMasks
  258. Q3Hit_EmptyData                                                                                                        N/A                                                                                                    
  259.  
  260. Q3Renderer_Flush                                                                                                    Q3View_Flush
  261. Q3Renderer_Sync                                                                                                        Q3View_Sync
  262.  
  263. kQ3AttributeType_ConstructiveSolidGeometryID
  264.                                                                                                                                                               kQ3AttributeTypeConstructiveSolidGeometryID
  265.  
  266. kQ3MethodTypeElementCopyAdd                                                        kQ3XMethodTypeElementCopyAdd
  267. kQ3MethodTypeElementCopyReplace                                     kQ3XMethodTypeElementCopyReplace
  268. kQ3MethodTypeElementCopyGet                                                        kQ3XMethodTypeElementCopyGet
  269. kQ3MethodTypeElementCopyDuplicate                                kQ3XMethodTypeElementCopyDuplicate
  270. kQ3MethodTypeElementDelete                                                            kQX3MethodTypeElementDelete
  271.  
  272. TQ3ElementCopyAddMethod                                                                        TQX3ElementCopyAddMethod
  273. TQ3ElementCopyReplaceMethod                                                        TQX3ElementCopyReplaceMethod
  274. TQ3ElementCopyGetMethod                                                                        TQX3ElementCopyGetMethod
  275. TQ3ElementCopyDuplicateMethod                                                TQX3ElementCopyDuplicateMethod
  276. TQ3ElementDeleteMethod                                                                            TQX3ElementDeleteMethod
  277.  
  278. Q3ElementClass_Register                                                                        Q3XElementClass_Register
  279. Q3ElementType_GetElementSize                                                    Q3XElementType_GetElementSize
  280.  
  281. kQ3MethodTypeAttributeInherit                                                kQ3XMethodTypeAttributeInherit
  282. kQ3MethodTypeAttributeIsDefault                                        kQ3XMethodTypeAttributeIsDefault
  283. kQ3MethodTypeAttributeCopyInherit                                kQ3XMethodTypeAttributeCopyInherit
  284. kQ3MethodTypeAttributeDefault                                                kQ3XMethodTypeAttributeDefault
  285.  
  286. TQ3AttributeInheritMethod                                                                TQ3XAttributeInheritMethod
  287. TQ3AttributeCopyInheritMethod                                                TQ3XAttributeCopyInheritMethod
  288. TQ3AttributeDefaultMethod                                                                TQ3XAttributeDefaultMethod
  289. TQ3AttributeIsDefaultMethod                                                        TQ3XAttributeIsDefaultMethod
  290.  
  291. Q3AttributeClass_Register                                                                Q3XAttributeClass_Register
  292.  
  293.                       •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •    •
  294.  
  295. Copyright ©1997 Apple Computer, Inc.
  296.  
  297. Apple, the Apple logo, Macintosh, and Mac OS are trademarks of Apple Computer, Inc., registered in the U.S. and other countries. QuickDraw is a trademark of Apple Computer, Inc. All other product names are trademarks or registered trademarks of their respective holders. Mention of non-Apple products is for informational purposes and constitutes neither an endorsement nor a recommendation. Apple assumes no responsibility with regard to the selection, performance, or use of these products.